package com.newstore.view;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.newstore.R;
import com.newstore.classes.Barcode;
import com.newstore.classes.Delivery;
import com.newstore.classes.Order;
import com.newstore.database.DeliveryDatabase;
import com.newstore.database.OrderDatabase;

/**
 * InfoOrder est l'activité qui se lance après la lecture du code-barres d'une
 * commande. Elle renseignent sur la référence, l'état et le destinataire de la
 * commande.
 * 
 * @author gprudhom
 * @version 1.0
 */
public class InfoOrder extends Activity
{
	TextView tvRefOrder;
	TextView tvStatus;
	TextView tvDeliveryName;
	TextView tvDeliveryQuai;

	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.infoorder);

		tvRefOrder = (TextView) findViewById(R.id.tvrefOrder);
		tvStatus = (TextView) findViewById(R.id.tvstatus);
		tvDeliveryName = (TextView) findViewById(R.id.tvdeliveryname);
		tvDeliveryQuai = (TextView) findViewById(R.id.tvdeliveryquai);
		Button btScan = (Button) findViewById(R.id.btscan);

		btScan.setOnClickListener(new View.OnClickListener()
		{
			public void onClick(View v)
			{
				readEANCode();
			}
		});
	}

	/**
	 * Méthode qui est appelé lors de la lecture du code-barres. Elle permet de
	 * vérifier que le code-barres scanné correspond bien à un des produits.
	 */
	public void onActivityResult(int requestCode, int resultCode, Intent intent)
	{
		IntentResult scanResult = IntentIntegrator.parseActivityResult(
				requestCode, resultCode, intent);
		boolean successScan = false;
		if (scanResult != null)
		{
			Barcode barcode = new Barcode(scanResult.getContents());
			try
			{
				SQLiteDatabase database = Authentication.accessDB.open(true);
				OrderDatabase orderDb = new OrderDatabase(database);
				Order order = orderDb.getOrderFromBarcode(barcode); // récupération de la commande
				Authentication.accessDB.close();
				displayInfoOrder(order);
				successScan = true;
			} 
			catch (Exception e){
				e.printStackTrace();
			}

		}
		if (!successScan)
			this.alertDialogForScan(
					"Scan échoué",
					"Le code-barres ne correspond à aucune commande en cours.",
					true);
	}

	/**
	 * Affiche les informations d'une commande
	 */
	public void displayInfoOrder(Order pOrder)
	{
		tvRefOrder.setText(pOrder.getReference());
		tvStatus.setText(pOrder.getStatus());
		tvDeliveryName.setText(pOrder.getDelivery().getName());
		tvDeliveryQuai.setText(pOrder.getDelivery().getAddress());
	}

	/**
	 * Alert Dialog qui permet de lancer le lecteur de code-barres
	 * 
	 * @param title
	 *            Titre de la fenêtre
	 * @param message
	 *            Message dans la fenêtre
	 */
	public void alertDialogForScan(String title, String message, boolean stockOk)
	{
		AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
		alertDialog.setTitle(title);
		alertDialog.setMessage(message);
		alertDialog.setPositiveButton("Ok",
				new DialogInterface.OnClickListener()
				{
					public void onClick(DialogInterface dialog, int which)
					{
						readEANCode();
					}
				});
		alertDialog.show();
	}

	/**
	 * Permet de lancer le lecteur de code-barres
	 */
	public void readEANCode()
	{
		IntentIntegrator integrator = new IntentIntegrator(this);
		integrator.initiateScan();
	}
}
